import requests
import csv
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 专家 ID 列表
expert_ids = [
    2372780, 2350039, 1839240, 2373570, 2475817, 2960437, 1924319, 2368156,
    2037784, 1919444, 2232902, 669056, 2475809, 27301, 2372607, 2380963,
    2374811, 2370934, 2359432, 2336694
]

# 数据列表收集专家信息
data_list = []

# 请求 URL
url = "https://i.cmzj.net/expert/queryExpertById"

# 抓取每位专家的信息
for expert_id in expert_ids:
    response = requests.get(url, params={"expertId": expert_id})
    if response.status_code == 200:
        info = response.json().get("data", {})
        data_list.append({
            "专家ID": info.get("expertId", ""),
            "姓名": info.get("name", ""),
            "专家等级": info.get("gradeName", ""),
            "彩龄": info.get("age", 0),
            "发文量": info.get("articles", 0),
            "双色球一等奖": info.get("ssqOne", 0),
            "双色球二等奖": info.get("ssqTwo", 0),
            "双色球三等奖": info.get("ssqThree", 0)
        })
    else:
        print(f"专家 ID {expert_id} 请求失败，状态码：{response.status_code}")

# 保存为 CSV 文件
csv_filename = "20位专家信息.csv"
with open(csv_filename, mode="w", newline="", encoding="utf-8") as file:
    writer = csv.DictWriter(file, fieldnames=[
        "专家ID", "姓名", "专家等级", "彩龄", "发文量",
        "双色球一等奖", "双色球二等奖", "双色球三等奖"
    ])
    writer.writeheader()
    writer.writerows(data_list)

print(f"CSV 文件已保存为：{csv_filename}")

# 创建 DataFrame
df = pd.DataFrame(data_list)

# 设置中文字体（避免乱码）
plt.rcParams['font.sans-serif'] = ['SimHei']

# 发文量分布
plt.figure(figsize=(10, 6))
sns.barplot(x="姓名", y="发文量", data=df, palette="Blues_d")
plt.title("专家发文量分布")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

# 彩龄分布
plt.figure(figsize=(10, 6))
sns.barplot(x="姓名", y="彩龄", data=df, palette="Greens_d")
plt.title("专家彩龄分布")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

# 一等奖分布
plt.figure(figsize=(10, 6))
sns.barplot(x="姓名", y="双色球一等奖", data=df, palette="Reds_d")
plt.title("双色球一等奖命中情况")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

# 二等奖分布
plt.figure(figsize=(10, 6))
sns.barplot(x="姓名", y="双色球二等奖", data=df, palette="Purples_d")
plt.title("双色球二等奖命中情况")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

# 三等奖分布
plt.figure(figsize=(10, 6))
sns.barplot(x="姓名", y="双色球三等奖", data=df, palette="Oranges_d")
plt.title("双色球三等奖命中情况")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

# 发文量与一等奖关系
plt.figure(figsize=(8, 6))
sns.scatterplot(x="发文量", y="双色球一等奖", data=df)
plt.title("发文量 与 一等奖命中数关系")
plt.tight_layout()
plt.show()

# 发文量与二等奖关系
plt.figure(figsize=(8, 6))
sns.scatterplot(x="发文量", y="双色球二等奖", data=df)
plt.title("发文量 与 二等奖命中数关系")
plt.tight_layout()
plt.show()

# 发文量与三等奖关系
plt.figure(figsize=(8, 6))
sns.scatterplot(x="发文量", y="双色球三等奖", data=df)
plt.title("发文量 与 三等奖命中数关系")
plt.tight_layout()
plt.show()
